package main

import (
	"github.com/labstack/echo/v4"
	"github.com/labstack/echo/v4/middleware"
	"log"
	"net/http"
	"strings"
)

// CSRF (Cross-site request forgery) 跨域请求伪造，也被称为 one-click attack 或者 session riding，通常缩写为 CSRF 或者 XSRF，
// 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
// [1] 跟跨网站脚本 (XSS) 相比，XSS 利用的是用户对指定网站的信任，CSRF 利用的是网站对用户网页浏览器的信任。
func main() {
	// 创建一个Echo实例
	e := echo.New()
	//用法一：
	//e.Use(middleware.CSRF())

	//用法二：自定义CSRF配置 （推荐）
	e.Use(middleware.CSRFWithConfig(CustomCSRFConfig()))

	// 注册路由
	e.GET("/index", Index)
	e.GET("/body", Body)
	e.Start(":80")
}

// CustomCSRFConfig
//
//	@Description: 自定义CSRF配置
//	@return middleware.CSRFConfig
func CustomCSRFConfig() middleware.CSRFConfig {
	return middleware.CSRFConfig{
		Skipper: func(c echo.Context) bool {
			uri := c.Request().RequestURI
			if strings.Contains(uri, "/index") {
				log.Println("uri:", uri, "--->>>Skipper-true")
				return true
			}
			log.Println("uri:", uri, "--->>>Skipper-false")
			return false
		},
		TokenLookup: "header:X-XSRF-TOKEN",
	}
}

func Index(c echo.Context) error {
	return c.String(http.StatusOK, "index success!")
}

func Body(c echo.Context) error {
	return c.String(http.StatusOK, "body success!")
}
